/*
    1. 用 MemPool : int memSize  int count 存放所有的资源
    2. 顺序遍历需求，如果 memPool 中有对应资源，则 true
    3. 要 qsort 一下 memPool，因为优先分配小的内存资源
*/

// step 0# 引入标准库头文件
#include <stdio.h>      // 提供输入输出函数，如 printf、fgets
#include <string.h>     // 提供字符串处理函数，如 strtok、strcspn
#include <stdlib.h>     // 提供通用工具函数，如 atoi、qsort

#define MAX 10000       // 最大数组长度

// step 1# 定义内存池结构体，每个资源包含大小和数量
typedef struct {
    int memSize;        // 内存块大小
    int count;          // 可用数量
} MemPool;

// step 2# 定义全局变量用于存储内存池信息和需求信息
MemPool memPool[MAX];   // 存储所有内存池资源
int memNum = 0;         // 当前已存储的内存池数量
int memNeed[MAX];       // 存储每个任务的内存需求
int memNeedQuest = 0;   // 当前已存储的需求数量

// step 3# 排序比较函数，用于 qsort 按内存块大小升序排列
int compare(const void *a, const void *b) {
    return ((*(MemPool *)a).memSize - (*(MemPool *)b).memSize);  // 升序排序
}

int main() {
    // step 4# 读取内存池输入，如 "128:2,256:1"
    char inputA[MAX];
    char inputB[MAX];

    fgets(inputA, sizeof(inputA), stdin);                         // 从标准输入读取内存池配置
    inputA[strcspn(inputA, "\n")] = 0;                             // 移除换行符
    char *token = strtok(inputA, ",");                            // 按逗号分割

    // step 5# 解析每一项内存池配置，填入 memPool 数组
    while (token != NULL) {
        sscanf(token, "%d:%d", &memPool[memNum].memSize, &memPool[memNum].count);  // 解析格式为 size:count
        memNum++;
        token = strtok(NULL, ",");
    }

    // step 6# 读取需求输入，如 "100,256,128"
    fgets(inputB, sizeof(inputB), stdin);
    inputB[strcspn(inputB, "\n")] = 0;
    token = strtok(inputB, ",");

    // step 7# 解析每一项内存需求，填入 memNeed 数组
    while (token != NULL) {
        memNeed[memNeedQuest++] = atoi(token);    // 字符串转 int
        token = strtok(NULL, ",");
    }

    // step 8# 按照 memSize 从小到大排序，优先使用小块内存
    qsort(memPool, memNum, sizeof(MemPool), compare);

    // step 9# 为第一个需求分配资源（单独处理用于控制输出格式）
    int j = 0;
    while (j < memNum) {
        if (memPool[j].memSize >= memNeed[0] && memPool[j].count >= 1) {
            memPool[j].count--;        // 分配成功，资源减一
            printf("true");            // 输出 true
            break;
        }
        j++;
    }
    if (j == memNum) printf("false");  // 没有合适资源，输出 false

    // step 10# 为剩下的每个需求尝试分配资源
    for (int i = 1; i < memNeedQuest; i++) {
        int k = 0;
        while (k < memNum) {
            if (memPool[k].memSize >= memNeed[i] && memPool[k].count >= 1) {
                memPool[k].count--;
                printf(",true");
                break;
            }
            k++;
        }
        if (k == memNum) printf(",false");  // 没找到合适的资源
    }

    return 0;
}
